﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Array_Part_2
{
    class Program
    {
        static void Main(string[] args)
        {
            int i;
            do
            {
                Console.WriteLine("Меню:");
                Console.WriteLine("1) Посчитать количество четных и нечетных элементов в массиве");
                Console.WriteLine("2) Максимальный из наименьших элементов столбцов");
                Console.WriteLine("3) Показать заполненный массив на экран и посчитать сумму элементов отдельно в каждом столбце и каждой строке");
                Console.WriteLine("4) Посчитать сумму элементов отдельно в каждой строке и определить номер строки, в которой эта сумма максимальна");
                Console.WriteLine("5) Найти произведение ненулевых элементов массива.");
                Console.WriteLine("6) Выйти из программы");
                Console.WriteLine("Ваше решение");
                i = Convert.ToInt32(Console.ReadLine());
                switch (i)
                {
                    case 1:
                       EvenAndOddElements();
                        break;
                    case 2:
                        MaxFromMinJ();
                        break;
                    case 3:
                        SummOfColumnAndRow();
                        break;
                    case 4:
                        SummOfRowWithIndex();
                        break;
                    case 5:
                        MultipleOfNoneZero();
                        break;
                    case 6:
                        Console.WriteLine("Программа будет закрыта");
                        break;
                    default:
                        Console.WriteLine("Неверный ввод");
                        break;
                }
                Console.Write("\n\nНажмите любую клавишу");
                Console.ReadKey();
                Console.Clear();
            }
            while (i != 6);
        }

        //__________________________________________________ Метод вывода 2-мерного массива
        static void PrintTwoDimensionalArray(int[,] arrayForPrint)
        {
            for (int i = 0; i < arrayForPrint.GetLength(0); i++)
            {
                for (int j = 0; j < arrayForPrint.GetLength(1); j++)
                {
                    Console.Write("{0}\t", arrayForPrint[i, j]);
                }
                Console.WriteLine();
            }
        }

        //__________________________________________________ Метод рандомного заполнения 2-мерного массива числами от 1 до 20
        static void FillArrayWithRandomNumbers(int[,] array)
        {
            Random rnd = new Random();
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array.GetLength(1); j++)
                {
                    array[i, j] = rnd.Next(1, 11);
                }
            }
        }

        //__________________________________________________ Метод вывода 1-мерного массива
        static void PrintDimensionalArray(int[] arrayForPrint)
        {
            for (int i = 0; i < arrayForPrint.GetLength(0); i++)
            {
                Console.WriteLine("{0} \t", arrayForPrint[i]);
            }
            Console.WriteLine();
        }

        //08-12-2016
        //Посчитать количество четных и нечетных элементов в массиве
        static void EvenAndOddElements()
        {
            int[,] array = new int[4, 5]; //размеры массива выбирает пользователь
            FillArrayWithRandomNumbers(array); //Заполнить массив случайными числами в диапазоне от 1 до 20
            PrintTwoDimensionalArray(array); ////Вывести полученный массив на экран.
            int evenCount = 0;
            int oddCount = 0;
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    if (array[i, j] % 2 == 0) //Посчитать количество четных и нечетных элементов в массиве
                        evenCount++;
                    else
                        oddCount++;
                }
            }
            Console.WriteLine("Odd count: {0}", oddCount);
            Console.WriteLine("Even count: {0}", evenCount);
        }
        //Создается массив из n строк и m столбцов.
        //Найти: максимальный из наименьших элементов столбцов.
        static void MaxFromMinJ()
        {
            Console.WriteLine("Введите размер двумерного массива n и m:");
            int n = Convert.ToInt32(Console.ReadLine());
            int m = Convert.ToInt32(Console.ReadLine());
            int[,] array = new int[n, m];
            FillArrayWithRandomNumbers(array);
            PrintTwoDimensionalArray(array);
            Console.WriteLine("__________________________________________________________________");
            int maxOfMin = 0;
            for (int j = 0; j < m; j++)
            {
                int minOfJ = int.MaxValue;
                for (int i = 0; i < n; i++)
                {
                    if (array[i, j] < minOfJ)
                        minOfJ = array[i, j];
                }
                if (minOfJ > maxOfMin)
                    maxOfMin = minOfJ;
            }
            Console.WriteLine();
            Console.WriteLine("Максимальный {0} из наименьших элементов столбца", maxOfMin);
        }
                 
        //Создать двумерный массив, заполненный случайными числами. После заполнения — показать заполненный массив на экран и посчитать сумму элементов отдельно в каждом столбце и каждой строке.

        static void SummOfColumnAndRow ()
        {
            Console.WriteLine("Введите размер двумерного массива n и m:");
            int n = Convert.ToInt32(Console.ReadLine());
            int m = Convert.ToInt32(Console.ReadLine());
            int[,] array = new int[n, m];
            FillArrayWithRandomNumbers(array);
            PrintTwoDimensionalArray(array);
            Console.WriteLine("__________________________________________________________________");
            int[] sumRow = new int[n];
            int[] sumColumn = new int[m];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    sumRow[i] += array[i, j];
                    sumColumn[j] += array[i, j];
                }
            }
            PrintDimensionalArray(sumRow);
            Console.WriteLine();
            PrintDimensionalArray(sumColumn);
        }

        //Заполнить двумерный массив случайными числами от 10 до 100.
        //Посчитать сумму элементов отдельно в каждой строке и определить номер строки, в которой эта сумма максимальна.

            //лень писать новый метод для чисел от 10 до 100 (никакой разницы)
        static void SummOfRowWithIndex()
        {
            Console.WriteLine("Введите размер двумерного массива n и m:");
            int n = Convert.ToInt32(Console.ReadLine());
            int m = Convert.ToInt32(Console.ReadLine());
            int[,] array = new int[n, m];
            FillArrayWithRandomNumbers(array);
            PrintTwoDimensionalArray(array);
            Console.WriteLine("__________________________________________________________________");
            int[] sumRow = new int[n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    sumRow[i] += array[i, j];
                }
            }
            int maxIndex = Array.IndexOf(sumRow, sumRow.Max())+1;
            PrintDimensionalArray(sumRow);
            Console.WriteLine(maxIndex);

        }

        //Создать двумерный массив, заполненный случайными числами. Найти произведение ненулевых элементов массива.
        static void MultipleOfNoneZero()
        {
            Console.WriteLine("Введите размер двумерного массива n и m:");
            int n = Convert.ToInt32(Console.ReadLine());
            int m = Convert.ToInt32(Console.ReadLine());
            int[,] array = new int[n, m];
            FillArrayWithRandomNumbers(array);
            PrintTwoDimensionalArray(array);
            Console.WriteLine("__________________________________________________________________");
            long multipl = 1;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (array[i, j] != 0)
                        multipl *= array[i, j];
                }
            }
            Console.WriteLine();
            Console.WriteLine(multipl);
        }

    } //class
}
